//#include <iostream>
//#include <cstdio>
//using namespace std;
//
//int n;
//
//int a[19][19];
//
//int x = 1;
//
//int main(){
//	cin >> n;
//	int i = 1,j = 1;
//	int i0 = 0,j0 = 0;
//	while(x <= n * n){
//		while(j <= n - j0){
//			if(!a[i][j]) a[i][j++] = x++;
//		}
//		j--;
//		i++;
//		while(i <= n - i0){
//			if(!a[i][j]) a[i++][j] = x++;
//		}
//		i--;
//		i0++;
//		j--;
//		while(j > j0){
//			if(!a[i][j]) a[i][j--] = x++;
//		}
//		j++;
//		j0++;
//		i--;
//		while(i > i0){
//			if(!a[i][j]) a[i--][j] = x++;
//		}
//		i++;
//		j++;
//	}
//	for(int i = 1;i <= n;i++){
//		for(int j = 1;j <= n;j++){
//			printf("%3d",a[i][j]);
//		}
//		cout << endl;
//	}
//	return 0;
//}

//#include <iostream>
//#include <cstdio>
//using namespace std;
//
//int dx[] = {1,0,-1,0};
//int dy[] = {0,1,0,-1};
//int a[19][19];
//int an = 1;
//
//int main(){
//	int n;
//	cin >> n;
//	int x = 0,y = 1;
//	int op = 0;
//	while(an <= n*n){
//		x += dx[op];
//		y += dy[op];
//		if(x > n||y > n||x < 1||y < 1){
//			x -= dx[op];
//			y -= dy[op];
//			op++;
//			continue;
//		}
//		if(a[x][y] != 0){
//			x -= dx[op];
//			y -= dy[op];
//			op++;
//			continue;
//		}
//		a[x][y] = an++;
//	}
//	for(int i = 1;i <= n;i++){
//		for(int j = 1;j <= n;j++){
//			printf("%3d",a[j][i]);
//		}
//		cout << endl;
//	}
//	return 0;
//}

#include <iostream>
#include <cstdio>
using namespace std;

int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
int a[19][19];
int an = 1;

int main(){
	int n;
	cin >> n;
	int x = 0,y = 1;
	int op = 0;
	while(an <= n*n){
		x += dx[op];
		y += dy[op];
		if(x > n||y > n||x < 1||y < 1){
			x -= dx[op];
			y -= dy[op];
			op = (op + 1) % 4;
			continue;
		}
		if(a[x][y] != 0){
			x -= dx[op];
			y -= dy[op];
			op = (op + 1) % 4;
			continue;
		}
		a[x][y] = an++;
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			printf("%3d",a[j][i]);
		}
		cout << endl;
	}
	return 0;
}
